package com.ruoyi.system.controller;

import java.util.concurrent.atomic.AtomicLong;
import java.text.SimpleDateFormat;

public class IdentifierGenerator {

    // 共享的AtomicLong用于生成自增序号
    private final AtomicLong sequence = new AtomicLong(0);

    // 日期时间格式化器
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

    // 生成账单序列号
    // 假设账单序列号格式为：BILL-年月日时分秒-序号（6位）
    public String generateBillSerialNumber() {
        long currentTimeMillis = System.currentTimeMillis();
        String datePart = sdf.format(currentTimeMillis);
        long seq = sequence.incrementAndGet(); // 获取并增加序号
        return "362BSN" + datePart  + String.format("%06d", seq);
    }

    // 生成支付流水号
    // 假设支付流水号格式为：PAY-年月日时分秒-序号（6位）
    public String generatePaymentSerialNumber() {
        long currentTimeMillis = System.currentTimeMillis();
        String datePart = sdf.format(currentTimeMillis);
        long seq = sequence.incrementAndGet(); // 注意：这里会连续增加序号
        return "362PAY" + datePart  + String.format("%06d", seq);
    }

    // 生成发票编码
    // 假设发票编码格式为：INV-年月日-序号（8位，考虑更大的数量级）
    public String generateInvoiceCode() {
        long currentTimeMillis = System.currentTimeMillis();
        String datePart = sdf.format(currentTimeMillis).substring(0, 14); // 只取年月日
        long seq = sequence.incrementAndGet(); // 注意：这里也会连续增加序号
        return "INV" + datePart + String.format("%08d", seq);
    }

//    示范
    public static void main(String[] args) {
        IdentifierGenerator generator = new IdentifierGenerator();

        // 测试生成编号
        System.out.println(generator.generateBillSerialNumber());
        System.out.println(generator.generatePaymentSerialNumber());
        System.out.println(generator.generateInvoiceCode());

        // 再次测试以展示序号的自增
        System.out.println(generator.generateBillSerialNumber());
        System.out.println(generator.generatePaymentSerialNumber());
        System.out.println(generator.generateInvoiceCode());
    }
}
